package com.zzq.my.jetpacks.jectpackapp.net.findBanner

import com.zzq.my.jetpacks.jectpackapp.bean.BannerInfokt
import com.zzq.my.jetpacks.jectpackapp.net.ApiService
import com.zzq.my.jetpacks.jectpackapp.net.ApiUrl
import com.zzq.my.jetpacks.net.base.BaseRepository
import com.zzq.my.jetpacks.net.base.RetrofitClient
import com.zzq.my.jetpacks.net.entity.ApiResponse
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import rxhttp.*

/**
 * 描述：class describe
 * 作者：zhuangzeqin
 * 时间: 2022/1/19-16:59
 * 邮箱：zzq@eeepay.cn
 * 备注:
 */
class FindBannerRepo : BaseRepository() {
    private val mApiService by lazy { RetrofitClient.getInstance().create(ApiService::class.java) }

    /* ------todo 注释说明--安装后台给定的标准格式； 大部分的接口都是按照这种模式------ */
    suspend fun findBanner(): ApiResponse<List<BannerInfokt.Data>> =
        executeHttp { mApiService.reqFindBannerList() }

    /** todo  部分接口如果需要 整个实体的情况 **/
    suspend fun findBanner2(): BannerInfokt? {
        return executeBeanHttp {
            mApiService.reqFindBannerList2()
        }
    }

    suspend fun findBanner3(): Result<List<BannerInfokt.Data>> {
        return RxHttp.postJson(ApiUrl.FINDBANNER)
            .toResponse<List<BannerInfokt.Data>>()
            .awaitResult()
    }
    suspend fun findBanner4(scope: CoroutineScope): Deferred<List<BannerInfokt.Data>> {
        return RxHttp.postJson(ApiUrl.FINDBANNER)
            .toResponse<List<BannerInfokt.Data>>()
            .async(scope)//一步操作  它们两个互不依赖，便可以并行执行
    }


    suspend fun findBanner5(): List<BannerInfokt.Data> {
        return RxHttp.postJson(ApiUrl.FINDBANNER)
            .toResponse<List<BannerInfokt.Data>>()
            .onErrorReturnItem(ArrayList())  //出现异常时，返回空的List
            .await()
//            .tryAwait() //tryAwait，出现异常时，返回null
    }

//     //获取student对象，null的话，直接返回
//        val student = getStudent() ?: return
//        //通过学生Id，查询家庭成员信息
//        val personList = getFamilyPersons(student.id)
//        //拿到相关信息后，便可直接更新UI，如：
//        tvName.text = student.name
//


}